<!DOCTYPE html>
<html lang="zh-cn">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>javascript 阶段</title>
</head>

<body>


    <script>
       
        // 构造函数
        function Animal() {
            this.name = "动物"
        }

        // 写法1：
        // 原型（Animal）
        // Animal.prototype.eatFood = function(){
        //     console.log(this.name +"在吃东西！");
        // }


        // 原型(Object)
        // Object.prototype.eatFood = function(){
        //     console.log(this.name +"在吃东西！");
        // }

        // 写法2：
        Animal.prototype = {
            constructor:  Animal,
            eatFood: function(){
                console.log(this.name+"在觅食！");
            },
            sayHello: function(){
                console.log(this.name +"在说话！");
            }
         }

        // 实例
        var a1 = new Animal();

        // 打印实例
        console.log(a1);
        a1.eatFood();
        a1.sayHello();

        // 构造函数原型 prototype
        // 实例对象的隐式原型   __proto__

        console.log(a1.__proto__ === Animal.prototype); // true
        console.log(a1.__proto__.__proto__ === Object.prototype); // true

        // 由__proto__ 所形成的链式结构，我们称之为原型链。在原型链上出现的属性和方法，实例对象就可以使用

        // 总结：
        //  实例对象可以使用原型上的属性和方法






    </script>
</body>

</html>